package jp.seraph.jsade.model;

import org.apache.commons.math.geometry.Vector3D;

/**
 * 個々のオブジェクトを表すインターフェース
 * 
 * オブジェクトとオブジェクトは、ジョイントを介して接続されている。 オブジェクトは1つの親オブジェクトと任意個の子オブジェクトを保持している。
 * 例外としてオブジェクト群のルートとなるオブジェクトは親オブジェクトを保持しない。
 * 
 */
public interface ModelPart extends ModelObject, CoordinateSystem {
    public boolean isRoot();

    /**
     * このオブジェクトに接続されている、子オブジェクトの数を返す。
     * 
     * @return
     */
    public int getJointCount();

    public Joint getParentJoint();

    public Joint getChildJoint(int aIndex);

    public Joint getChildJoint(String aName);

    public ModelObject getParentObject();

    public ModelObject getChildObject(int aIndex);

    public ModelObject getChildObject(String aName);

    /**
     * 親ジョイント座標系からこのオブジェクトの座標系への相対移動を表すベクトルを取得する。 isRoot() =
     * trueである時、このメソッドは(0,0,0)を表す座標を返すべきである。
     * 
     * @return
     */
    public Vector3D getTranslation();
}
